<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Git学习笔记</title>
    <link rel="stylesheet" href="./gitcontent.css">
</head>
<body>
    <div class="container">
        <header>
            Git 学习笔记
        </header>
        <article>
            <h2>二、独自使用GIT时常见的场景</h2>
            <section>
                    <h3>删除不需要的分支</h3>
                    <ul>
                        <li>
                            git branch -D 分支名 （删除分支）git branch -d branch_name:使用-d 在删除前Git会判断在该分支上开发的功能是否被merge的其它分支。如果没有，不能删除。如果merge到其它分支，但之后又在其上做了开发，使用-d还是不能删除。-D会强制删除。
                        </li>
                        <li>git branch -av（查看分支数量）</li>
                    </ul>
            </section>
            <section>
                <h3>修改最新commit的 message</h3>
                <ul>
                    <li>git commit --amend</li>
                    <li>改message后 wq!返回</li>
                </ul>
            </section>
            <section>
                <h3>修改老旧commit的 message</h3>
                <ul>
                    <li>git rebase -i commitId</li>
                    <li>pick 改 r 后 wq!返回</li>
                    <li>然后会弹出修改 message 的窗口，wq! 保存返回</li>
                    <li>注意：此次操作是对还没进行分享到集成的进行修改，分享到集成后修改会对团队造成不必要的麻烦</li>
                </ul>
            </section>
            <section>
                <h3>把连续的多个commit整理成一个</h3>
                <ul>
                    <li>git rebase -i commitId（选择时间最远的那个）<br>
                        第一条和最后一条pick 其它 s <br>
                        在弹出框中输入 message 然后 wq! 保存
                    </li>
                </ul>
            </section>
            <section>
                <h3>把间隔的多个commit整理成一个</h3>
                <ul>
                    <li>git rebase -i commitId（选择时间最远的那个）<br>
                        把 最远的那个commitId复制到第一行并pick，第二行s，多余的pick删除<br>
                        在弹出框中输入 message 然后 wq! 保存
                    </li>
                </ul>
            </section>
            <section>
                <h3>比较暂存区和HEAD所含文件差异</h3>
                <ul>
                    <li>git diff --cached (cached表示暂存区和HEAD的差异)</li>
                </ul>
            </section>
            <section>
                <h3>比较工作区和暂存区文件的差异</h3>
                <ul>
                    <li>git diff (比较工作区和暂存区文件的区别)<br>
                        如果只比较某个文件 git diff -- 文件名
                    </li>
                </ul>
            </section>
            <section>
                <h3>让暂存区恢复成和HEAD一样</h3>
                <ul>
                    <li>git reset HEAD <file> 让某个文件的暂存区恢复成和HEAD一样</li>
                    <li>git reset HEAD 让所有文件的暂存区恢复成和HEAD一样</li>
                </ul>
            </section>
            <section>
                <h3>让工作区的文件恢复和暂存区一样</h3>
                <ul>
                    <li>git checkout -- fileName</li>
                </ul>
            </section>
            <section>
                <h3>取消暂存区部分文件的更改</h3>
                <ul>
                    <li>git reset HEAD -- fileName fileName</li>
                </ul>
            </section>
            <section>
                <h3>消除最近几次的提交</h3>
                <ul>
                    <li>git reset --hard commitId<br>
                        注意：会丢失该版本号之后提交内容
                    </li>
                </ul>
            </section>
            <section>
                <h3>看看不同提交的指定文件的差异</h3>
                <ul>
                    <li>git diff 分支 分支 -- fileName</li>
                    <li>git diff 版本号 版本号 -- fileName</li>
                </ul>
            </section>
            <section>
                <h3>正确删除文件的方法</h3>
                <ul>
                    <li>
                        <ol>
                            <li>rm fileName（删除工作路径上的文件）</li>
                            <li>git rm fileName（提交到暂存区）</li>
                        </ol>
                    </li>
                    <li>git rm fileName：如果直接用此命令会先删除工作路径上的文件，然后提交到暂存区（推荐使用）</li>
                </ul>
            </section>
            <section>
                <h3>开发中临时加塞紧急任务解决方案</h3>
                <ul>
                    <li>
                        <ol>
                            <li>git stash</li>
                            <li>git stash list(查看)</li>
                            <li>紧急任务完成并提交后</li>
                            <li>git stash [apply | pop]:
                                apply后stash list里还存着，随时可以用；pop 后list就没有数据了。<br>
                                pop 后如果提示被覆盖，可以用 git reset --hard HEAD，再次执行git stash pop。
                            </li>
                        </ol>
                    </li>
                </ul>
            </section>
            <section>
                <h3>指定不需要git管理的文件</h3>
                <ul>
                    <li>配置 .gitignore 文件
                        <ol>
                            <li>文件名 或者 后缀名 后缀名/ 文件名/(文件内) 等</li>
                        </ol>
                    </li>
                </ul>
            </section>
            <section>
                <h3>将Git仓库备份到本地</h3>
                <ul>
                    <li>
                        协议
                        <ol>
                            <li>哑协议：<br>
                                传输进度不可见<br>
                                传输速度较智能协议慢
                            </li>
                            <li>
                                智能协议：<br>
                                传输可见进度<br>
                                较哑协议传输速度快
                            </li>
                        </ol>
                    </li>
                    <li>
                        命令及步骤<br>
                        1）找个目录执行 clone (git clone --bare[不在工作区的项目]）。或<br>
                        2）用init建个git仓库，然后从备份数据库添加remote，再push到新建仓库；或者<br>
                        3）用init建个git仓库，然后在新仓库添加remote，再把备份数据库fetch/pull到新仓库。<br>
                        <ol>
                            <li>git remote -v :查看是否已经有remote</li>
                            <li>git remote add file:///url</li>
                            <li>git push</li>
                        </ol>
                    </li>
                </ul>
            </section>
        </article>
    </div>
</body>
</html>